# -*- coding: utf-8 -*-
import os
from fabric import colors
from fabric.api import run, env, hosts, local, put
from fabric.context_managers import cd, lcd, prefix, shell_env

env.use_ssh_config = True

# Default '/bin/bash -l -c', no use .bashrc
env.shell = "/bin/bash -l -i -c"


"""
需求：
因为数据库可能很大，可能几G，整个数据库同步到线上测试环境太慢，所以只同步需要的表

用法：
fab -f migrate_198_to_193 migrate_table:table1,table2,tableN
"""


@hosts("aws-usercenter-dev")
def migrate_table(*tables):
    MONGO_HOST = "192.168.1.198"
    MONGO_PORT = 27017
    MONGO_DBNAME = "vtc"

    REMOTE_MONGO_PORT = 27017

    tmp_dir = '/tmp/mongodata'

    # 确保目录存在
    local('mkdir -p %s' % tmp_dir)
    run('mkdir -p %s' % tmp_dir)

    for table in tables:
        tmp_path = '%s/%s.dat' % (tmp_dir, table)

        # 导出到本地
        local("mongoexport -h %s --port %s -d %s -c %s -o %s" % (MONGO_HOST, MONGO_PORT, MONGO_DBNAME, table, tmp_path))

        # 上传到机器
        put(tmp_path, tmp_dir)

        # 导入
        run("mongoimport -h %s --port %s -d %s -c %s --upsert --drop %s" % ('localhost', REMOTE_MONGO_PORT, MONGO_DBNAME, table, tmp_path))
